package controllers;

import java.util.Date;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import controllers.CRUD.ObjectType;

import models.ArcadiaLog;
import models.ContactoEmpresa;
import models.HistorialContactoCargo;
import models.Organizacion;
import models.TipoEvento;
import play.db.Model;
import play.db.jpa.JPA;
import play.exceptions.TemplateNotFoundException;
import play.mvc.With;
import utils.ArcadiaConstants.TIPO_ENTIDAD;

@With(Secure.class)
public class ContactoEmpresas extends ArcadiaCRUD {

	public static void removeContactoEmpresa(String idContactoEmpresa) throws Exception {
		ContactoEmpresa contactoEmpresa = ContactoEmpresa.findById(new Long(idContactoEmpresa));
		if (contactoEmpresa != null) {
			
			ArcadiaLog log = new ArcadiaLog();
			log.entidad = TIPO_ENTIDAD.ORGANIZACION;
			log.idEntidad = new Long(contactoEmpresa.organizacion._key().toString());
			log.fecha = new Date();
			log.user = Security.getConnected();
			log.descripcion = "Eliminación del contacto ".concat(contactoEmpresa.contacto.toString());
			log._save();
			contactoEmpresa.organizacion.lastLogs = log;
			contactoEmpresa.organizacion._save();
			
			contactoEmpresa._delete();
			redirect("Organizaciones.show", contactoEmpresa.organizacion._key());
		} 
		
		redirect("Admin.index");
		
	}
	

	public static void asociarContacto(String organizacionId, String contactoId) throws Exception {
		Organizacion organizacion = null;
		try {
			organizacion =Organizacion.findById(new Long(organizacionId));
			Organizacion contacto =Organizacion.findById(new Long(contactoId));
			ContactoEmpresa contactoEmpresa = ContactoEmpresa.find("organizacion.id = ? and contacto.id = ?", new Long(organizacionId), new Long(contactoId)).first();
			if (contacto != null && organizacion != null && contactoEmpresa==null) {
				
				contactoEmpresa = new ContactoEmpresa();
				contactoEmpresa.organizacion = organizacion;
				contactoEmpresa.contacto = contacto;
				contactoEmpresa.area = "";
				contactoEmpresa.cargo = "";
				contactoEmpresa._save();
				contactoEmpresa._save();
				
				ArcadiaLog log = new ArcadiaLog();
				log.entidad = TIPO_ENTIDAD.ORGANIZACION;
				log.idEntidad = new Long(organizacion._key().toString());
				log.fecha = new Date();
				log.user = Security.getConnected();
				log.descripcion = "Asociación del contacto ".concat(contacto.toString());
				log._save();
				organizacion.lastLogs = log;
				organizacion._save();
				
			} 
		} catch (TemplateNotFoundException e) {
			
		}
		if (organizacion==null)
			redirect("Admin.index");
		else
			redirect("Organizaciones.show", organizacion._key());
	}

	public static void historiaCargos(String idContactoEmpresa) throws Exception {
		ContactoEmpresa contactoEmpresa = ContactoEmpresa.findById(new Long(idContactoEmpresa));
		String contactoNombre = "";
		String empresaNombre = "";
		if (contactoEmpresa != null) {
			List<HistorialContactoCargo> objects = contactoEmpresa.historias; 
			contactoNombre = contactoEmpresa.contacto.toString();
			empresaNombre = contactoEmpresa.organizacion.toString();
			render(objects, contactoNombre, empresaNombre);
		} 
		
	}
	
	public static void updateContactoOrganizacion(String contactoEmpresaId, String cargo, String area, String telefono, String email) {
		String[] result = new String[2];
		ContactoEmpresa contactoEmpresa = ContactoEmpresa.findById(new Long(contactoEmpresaId));
		if (contactoEmpresa!=null) {
			if (contactoEmpresa.cargo == null || !contactoEmpresa.cargo.toUpperCase().trim().equals(cargo.toUpperCase().trim())) {
				HistorialContactoCargo historial = new HistorialContactoCargo();
				historial.cargo = cargo;
				historial.fecha = new Date();
				historial._save();
				contactoEmpresa.addHistoria(historial);
			}

			contactoEmpresa.cargo = cargo;
			contactoEmpresa.area = area;
			contactoEmpresa.contacto.telefono = telefono;
			contactoEmpresa.contacto.mail = email;
			contactoEmpresa._save();
			contactoEmpresa.contacto._save();
			result[0] = "OK";
		} else {
			result[0] = "ERROR";
			result[1] = "No se encuentra el contacto que intenta modificar.";
		}
		renderJSON(result);
	}
	
}
